// interface(接口类型):申明对象类型
// 用法
// interface  名字  {属性名:类型}
// type       名字={属性名:类型}

interface IObj {
  username: string
  age: number
}

let obj: IObj = { username: '张三', age: 18 }

// 区别：
// 1:interface针对对象,type针对所有
// 2:interface它有继承特性,type也可以用&解决
// 3:interface支持重复定义，重复定义后会累加,type重复定义报错
// 平时开发时怎么选择(对象)
// 类型定义希望后期可扩展优先用:interface
// 类型定义希望后期不希望有任何更改:type
// 公共组件 优先考虑用interface
// 局部组件 优先用type

interface Ip2d {
  x: number
  y: number
}
let point2D: Ip2d = { x: 10, y: 20 }
// 继承语法  interface  名字  extends 其它 {....}
// interface Ip3d {
//   x: number
//   y: number
//   z: number
// }
interface Ip3d extends Ip2d {
  z: number
}

let point3D: Ip3d = { x: 10, y: 20, z: 30 }

// type实现继承
type T2d = {
  x: number
  y: number
}
type T3d = T2d & { z: number }
let xxx: T3d = { x: 10, y: 20, z: 30 }

interface Ix1 {
  x: number
}
interface Ix1 {
  y: number
}
let num1: Ix1 = { x: 10, y: 20 }

type Tx1 = {
  x: number
}
// type Tx1 = {
//   y: number
// }

export {}
